Node.js HTTP Module

Node.js HTTP

অন্তর্নির্মিত HTTP মডিউল

Node.js HTTP , HTTP HTTP .

এই মডিউলটি Node.js-এ ওয়েব অ্যাপ্লিকেশন এবং API তৈরির জন্য অপরিহার্য।

HTTP সার্ভার

অনুরোধগুলি পরিচালনা করতে এবং প্রতিক্রিয়া পাঠাতে HTTP সার্ভার তৈরি করুন

HTTP অনুরোধ

অন্যান্য সার্ভারে HTTP অনুরোধ করুন

HTTP পদ্ধতি

বিভিন্ন HTTP পদ্ধতি পরিচালনা করুন (GET, POST, PUT, DELETE, ইত্যাদি)

একটি HTTP মডিউল যোগ করা হচ্ছে

HTTP মডিউল ব্যবহার করতে, প্রয়োজন() পদ্ধতি ব্যবহার করে এটি আপনার অ্যাপ্লিকেশনে যোগ করুন:

// Using CommonJS require (Node.js default)
const http = require('http');

// Or using ES modules (Node.js 14+ with "type": "module" in package.json)
// import http from 'http';

একটি HTTP সার্ভার তৈরি করা হচ্ছে

HTTP মডিউলের createServer() পদ্ধতিটি একটি HTTP সার্ভার তৈরি করে যা নির্দিষ্ট পোর্টে অনুরোধগুলি শোনে এবং প্রতিটি অনুরোধের জন্য একটি কলব্যাক ফাংশন চালায়।

একটি মৌলিক HTTP সার্ভার উদাহরণ

// Import the HTTP module
const http = require('http');

// Create a server object
const server = http.createServer((req, res) => {
  // Set the response HTTP header with HTTP status and Content type
  res.writeHead(200, { 'Content-Type': 'text/plain' });

  // Send the response body as 'Hello, World!'
  res.end('Hello, World!\n');
});

// Define the port to listen on
const PORT = 3000;

// Start the server and listen on the specified port
server.listen(PORT, 'localhost', () => {
  console.log(`Server running at http://localhost:${PORT}/`);
});

কোড বোঝা

http.createServer()- একটি নতুন HTTP সার্ভার উদাহরণ তৈরি করে
কলব্যাক ফাংশন- দুটি প্যারামিটার সহ প্রতিটি অনুরোধের জন্য কার্যকর করা হয়েছে: অনুরোধ - অনুরোধ বস্তু, res - প্রতিক্রিয়া বস্তু
res.writeHead()- প্রতিক্রিয়া স্ট্যাটাস কোড এবং হেডার সেট করে
res.end()- একটি প্রতিক্রিয়া পাঠায় এবং সংযোগটি বন্ধ করে দেয়
server.listen()- নির্দিষ্ট পোর্টে সার্ভার শুরু করে

সার্ভার চলমান

🚀কিভাবে সার্ভার চালাতে হয়:

  • কোডটি server.js নামে একটি ফাইলে সংরক্ষণ করুন
  • Node.js : node server.js
  • প্রতিক্রিয়া দেখতে আপনার ব্রাউজারে http://localhost:3000 এ যান

HTTP শিরোনাম সঙ্গে কাজ

HTTP হেডার আপনাকে আপনার প্রতিক্রিয়া সহ অতিরিক্ত তথ্য পাঠাতে দেয়।

res.writeHead() পদ্ধতিটি স্ট্যাটাস কোড এবং প্রতিক্রিয়া শিরোনাম সেট করতে ব্যবহৃত হয়।

উত্তর শিরোনাম সেট আপ করা হচ্ছে

const http = require('http');

const server = http.createServer((req, res) => {
  // Set status code and multiple headers
  res.writeHead(200, {
    'Content-Type': 'text/html',
    'X-Powered-By': 'Node.js',
    'Cache-Control': 'no-cache, no-store, must-revalidate',
    'Set-Cookie': 'sessionid=abc123; HttpOnly'
  });

  res.end('

Hello, World!

'); }); server.listen(3000, () => { console.log('Server running at http://localhost:3000/'); });

সাধারণ HTTP স্ট্যাটাস কোড

কোড খবর ব্যাখ্যা
200 OK সফল HTTP অনুরোধের জন্য একটি স্থির প্রতিক্রিয়া
201 Created অনুরোধ পূর্ণ হয় এবং একটি নতুন সংস্থান তৈরি করা হয়
301 Moved Permanently সংস্থানটি একটি নতুন URL এ সরানো হয়েছে৷
400 Bad Request ক্লায়েন্ট ত্রুটির কারণে সার্ভার অনুরোধটি প্রক্রিয়া করতে পারে না
401 Unauthorized অনুমোদন প্রয়োজন
404 Not Found অনুরোধ করা সম্পদ খুঁজে পাওয়া যায়নি
500 Internal Server Error একটি অপ্রত্যাশিত পরিস্থিতির সম্মুখীন হয়েছিল

অনুরোধ শিরোনাম পড়া

req.headers :

const http = require('http');

const server = http.createServer((req, res) => {
  // Log all request headers
  console.log('Request Headers:', req.headers);

  // Get specific headers (case-insensitive)
  const userAgent = req.headers['user-agent'];
  const acceptLanguage = req.headers['accept-language'];

  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end(`User-Agent: ${userAgent}\nAccept-Language: ${acceptLanguage}`);
});

server.listen(3000);

URL এবং ক্যোয়ারী স্ট্রিং নিয়ে কাজ করা

Node.js URL , URL .

অনুরোধ URL অ্যাক্সেস করা হচ্ছে

req.url URL , .

const http = require('http');

const server = http.createServer((req, res) => {
  // Get the URL and HTTP method
  const { url, method } = req;

  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end(`You made a ${method} request to ${url}`);
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

ইউআরএল মডিউল দিয়ে ইউআরএল পার্স করা হচ্ছে

ইউআরএল মডিউল ইউআরএল রেজোলিউশন এবং পার্সিংয়ের জন্য ইউটিলিটি প্রদান করে।

const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
  // Parse the URL
  const parsedUrl = url.parse(req.url, true);

  // Get different parts of the URL
  const pathname = parsedUrl.pathname; // The path without query string
  const query = parsedUrl.query; // The query string as an object

  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({
    pathname,
    query,
    fullUrl: req.url
  }, null, 2));
});

server.listen(3000);

প্রশ্ন স্ট্রিং সঙ্গে কাজ

উন্নত ক্যোয়ারী স্ট্রিং ম্যানিপুলেশনের জন্য, আপনি querystring প্যাকেজ ব্যবহার করতে পারেন:

const http = require('http');
const { URL } = require('url');
const querystring = require('querystring');

const server = http.createServer((req, res) => {
  // Using the newer URL API (Node.js 10+)
  const baseURL = 'http://' + req.headers.host + '/';
  const parsedUrl = new URL(req.url, baseURL);

  // Get query parameters
  const params = Object.fromEntries(parsedUrl.searchParams);

  // Example of building a query string
  const queryObj = {
    name: 'John Doe',
    age: 30,
    interests: ['programming', 'music']
  };
  const queryStr = querystring.stringify(queryObj);

  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({
    path: parsedUrl.pathname,
    params,
    exampleQueryString: queryStr
  }, null, 2));
});

server.listen(3000);

বিভিন্ন HTTP পদ্ধতি পরিচালনা করা

RESTful APIগুলি সাধারণত রিসোর্সে বিভিন্ন ক্রিয়াকলাপ সম্পাদন করতে বিভিন্ন HTTP পদ্ধতি (GET, POST, PUT, DELETE, ইত্যাদি) ব্যবহার করে।

Node.js HTTP HTTP :

const http = require('http');
const { URL } = require('url');

// In-memory data store (for demonstration)
let todos = [
  { id: 1, task: 'Learn Node.js', completed: false },
  { id: 2, task: 'Build an API', completed: false }
];

const server = http.createServer((req, res) => {
  const { method, url } = req;
  const parsedUrl = new URL(url, `http://${req.headers.host}`);
  const pathname = parsedUrl.pathname;

  // Set CORS headers (for development)
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');

  // Handle preflight requests
  if (method === 'OPTIONS') {
    res.writeHead(204);
    res.end();
    return;
  }

  // Route: GET /todos
  if (method === 'GET' && pathname === '/todos') {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify(todos));
  }
  // Route: POST /todos
  else if (method === 'POST' && pathname === '/todos') {
    let body = '';
    req.on('data', chunk => {
      body += chunk.toString();
    });

    req.on('end', () => {
      try {
        const newTodo = JSON.parse(body);
        newTodo.id = todos.length > 0 ? Math.max(...todos.map(t => t.id)) + 1 : 1;
        todos.push(newTodo);
        res.writeHead(201, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify(newTodo));
      } catch (error) {
        res.writeHead(400, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify({ error: 'Invalid JSON' }));
      }
    });
  }

  // Route: PUT /todos/:id
  else if (method === 'PUT' && pathname.startsWith('/todos/')) {
    const id = parseInt(pathname.split('/')[2]);
    let body = '';

    req.on('data', chunk => {
      body += chunk.toString();
    });

    req.on('end', () => {
      try {
        const updatedTodo = JSON.parse(body);
        const index = todos.findIndex(t => t.id === id);

        if (index === -1) {
          res.writeHead(404, { 'Content-Type': 'application/json' });
          res.end(JSON.stringify({ error: 'Todo not found' }));
        } else {
          todos[index] = { ...todos[index], ...updatedTodo };
          res.writeHead(200, { 'Content-Type': 'application/json' });
          res.end(JSON.stringify(todos[index]));
        }
      } catch (error) {
        res.writeHead(400, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify({ error: 'Invalid JSON' }));
      }
    });
  }

  // Route: DELETE /todos/:id
  else if (method === 'DELETE' && pathname.startsWith('/todos/')) {
    const id = parseInt(pathname.split('/')[2]);
    const index = todos.findIndex(t => t.id === id);

    if (index === -1) {
      res.writeHead(404, { 'Content-Type': 'application/json' });
      res.end(JSON.stringify({ error: 'Todo not found' }));
    } else {
      todos = todos.filter(t => t.id !== id);
      res.writeHead(204);
      res.end();
    }
  }

  // 404 Not Found
  else {
    res.writeHead(404, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ error: 'Not Found' }));
  }
});

const PORT = 3000;
server.listen(PORT, () => {
  console.log(`Server running at http://localhost:${PORT}/`);
});

🔧HTTP পদ্ধতির জন্য সর্বোত্তম অনুশীলন:

  • GET:একটি সংস্থান বা সংস্থানগুলির সেট পান (অবশ্যই অদম্য হতে হবে)
  • POST:একটি নতুন সংস্থান তৈরি করুন (অদম্য নয়)
  • PUT:একটি বিদ্যমান সংস্থান আপডেট করুন বা অন্যথায় তৈরি করুন (অদম্য)
  • PATCH:আংশিকভাবে একটি সম্পদ আপডেট করুন
  • DELETE:একটি সম্পদ অপসারণ (অদম্য)
  • HEAD:রেসপন্স বডি ছাড়া GET এর মতই
  • OPTIONS:লক্ষ্য সম্পদের জন্য যোগাযোগের বিকল্পগুলি বর্ণনা করুন

স্ট্রিমিং প্রতিক্রিয়া

Node.js . HTTP .

একটি বড় ফাইল স্ট্রিমিং

const http = require('http');
const fs = require('fs');
const path = require('path');

const server = http.createServer((req, res) => {
  // Get the file path from the URL
  const filePath = path.join(__dirname, req.url);

  // Check if file exists
  fs.access(filePath, fs.constants.F_OK, (err) => {
    if (err) {
      res.statusCode = 404;
      res.end('File not found');
      return;
    }

    // Get file stats
    fs.stat(filePath, (err, stats) => {
      if (err) {
        res.statusCode = 500;
        res.end('Server error');
        return;
      }

      // Set appropriate headers
      res.setHeader('Content-Length', stats.size);
      res.setHeader('Content-Type', 'application/octet-stream');

      // Create read stream and pipe to response
      const stream = fs.createReadStream(filePath);

      // Handle errors
      stream.on('error', (err) => {
        console.error('Error reading file:', err);
        if (!res.headersSent) {
          res.statusCode = 500;
          res.end('Error reading file');
        }
      });

      // Pipe the file to the response
      stream.pipe(res);
    });
  });
});

const PORT = 3000;
server.listen(PORT, () => {
  console.log(`File server running at http://localhost:${PORT}/`);
});

স্ট্রিমিং এর সুবিধা

মেমরি ক্ষমতা:মেমরিতে সবকিছু লোড করার পরিবর্তে খণ্ডে ডেটা প্রসেস করে
প্রথম বাইটের দ্রুততম সময়:উপলভ্য হওয়ার সাথে সাথে ডেটা পাঠানো শুরু হয়
পিছনের চাপ নিয়ন্ত্রণ:রিড স্ট্রীম পজ করে স্বয়ংক্রিয়ভাবে ধীরগতির ক্লায়েন্টদের পরিচালনা করে

অনুশীলন করুন

Node.js HTTP .

http.startServer()
✗ ভুল! "http.startServer()" Node.js-এ একটি বৈধ পদ্ধতি নয়
http.newServer()
✗ ভুল! "http.newServer()" Node.js-এ একটি বৈধ পদ্ধতি নয়
http.createServer()
✓ ঠিক আছে! "http.createServer()" হল সঠিক পদ্ধতি যা Node.js-এ একটি HTTP সার্ভার তৈরি করতে ব্যবহৃত হয়
http.initServer()
✗ ভুল! "http.initServer()" Node.js-এ একটি বৈধ পদ্ধতি নয়